package com.atguigu.mytest;

import lombok.extern.slf4j.Slf4j;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.Expression;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;

/**
 * @Author: shenhao
 * @CreatTime: 2024/11/7 9:43
 * @Version: 1.0
 * springEl表达式, 和#{} 占位符的功能差不多
 * 设计模式, 面向接口编程, 而不是面向实现编程 23种设计模式
 * 优先使用对象组合而不是继承
 * 面向接口编程,组合大于继承
 * 三大类, 创建型, 结构型, 行为型模式
 */
@Slf4j
public class SpringElDemo {
    public static void main(String[] args) {
        //1 log日志占位符{}替换
        log.info("log:{}","SpringElDemo");
        //2 String.format占位符替换  %s 不做任何处理, 字符串占位符, %S, 会将小写字符转换为大写字母
        String result = String.format("%s,JAVA", "Shangguigu study");
        System.out.println(result);
        //3 SpringELExpress表达式,#号后面的内容可以被具体值替换
        String var = "#userid";
        System.out.println(var);
        SpelExpressionParser parser = new SpelExpressionParser();
        Expression exp = parser.parseExpression(var);
        EvaluationContext context = new StandardEvaluationContext();
        // 这里要放#后面的变量的值
        Long userId = 45L;
        context.setVariable("userid",userId);
        String s = exp.getValue(context).toString();
        System.out.println(s);
        System.out.println(System.currentTimeMillis() / 1000L);

    }
}
